package com;

import java.util.Arrays;

/**
 * @author 罗俊华
 * @date 2021/5/10 - 10:42 上午
 * 排序的成本模型：在研究算法时，我们需要计算【比较】和【交换】的数量。
 * 对于不交换元素的算法，会统计访问数组的次数
 */
public abstract class Sort<Item extends Comparable<Item>> {

    public abstract void sort(Item[] comparableArray);

    /**
     * 对元素进行比较
     *
     * @param v
     * @param w
     * @return
     */
    public boolean less(Item v, Item w) {
        return v.compareTo(w) < 0;
    }


    public void exchange(Item[] comparableArray, int i, int j) {
        Item itemForExchange = comparableArray[i];
        comparableArray[i] = comparableArray[j];
        comparableArray[j] = itemForExchange;
    }

    public void show(Item[] comparableArray) {
        System.out.println(Arrays.toString(comparableArray));
    }

    public boolean isSorted(Item[] comparableArray) {
        for (int i = 0; i < comparableArray.length - 1; i++) {

            if (this.less(comparableArray[i + 1], comparableArray[i])) {
                return false;
            }
        }
        return true;
    }
}
